/*
 * @Author       : xiaowu wwl093000@163.com
 * @Date         : 2023-04-19 08:22:24
 * @LastEditTime : 2023-04-20 08:52:53
 * @LastEditors  : xiaowu wwl093000@163.com
 * @FilePath     : /erp-admin-ui/src/utils/alioss.js
 * @Description  : -
 */
import {v4 as uuidv4} from 'uuid'
import store from '@/store'
import branch from "@/views/userInfo/branch/index.vue";
// import axios from 'axios'

// let basePath = 'www.yourapi.com' // 你的服务器接口域名

const OSS = require('ali-oss')

/**
 * 阿里云oss sdk文件上传
 * @param {*} file 文件流
 * @param {*} successCallback 成功回调
 * @param {*} errCallBack 失败回调
 * @param {*} bucketName 阿里云桶名（可以指定多个桶名）
 * @param {*} dir 上传文件夹路径  譬如images
 */

// 上传
export function bucketUpload(file, successCallback = new Function(), errCallBack = new Function(), bucketName, dir) {
  let fileName = file.name
  let pathName = window.location.host
  let bucketNameTemp = bucketName
  let requestData = {
    bucket: bucketNameTemp,
    dir: dir
  }
  // 先获取上传要的资料签名
  // axios({
  //     method: 'post',
  //     url: basePath + '/aliyunsts', // 找后台要接口，返回new OSS需要的参数
  //     headers: {
  //       'Content-Type': 'application/json'
  //     },
  //     data: requestData // 这里的参数，看后台要什么，沟通确定
  //   })
  //   .then(res => {
  // let obj = res.data || {}
  let config = {}
  // console.log(obj)
  // config.host = obj.OssUrl
  // 实例化一个上传客户端
  const client = new OSS({
    // yourRegion填写Bucket所在地域。Region填写为oss-cn-hangzhou。
    region: store.getters.region,
    // 从STS服务获取的临时访问密钥（AccessKey ID和AccessKey Secret）。
    accessKeyId: store.getters.accessKeyId,
    accessKeySecret: store.getters.accessKeySecret,
    // 从STS服务获取的安全令牌（SecurityToken）。
    // stsToken: obj.SecurityToken,
    // 填写Bucket名称。
    bucket: store.getters.bucket
  })
  var prefix = (bucketNameTemp ? bucketNameTemp : store.getters.prefix) + '/'

  try {
    // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
    // 您可以通过自定义文件名（例如exampleobject.txt）或文件完整路径（例如exampledir/exampleobject.txt）的形式实现将数据上传到当前Bucket或Bucket中的指定目录。
    // data对象可以自定义为file对象、Blob数据或者OSS Buffer。

    // 为保证唯一性，通过uuid将文件名替换
    let uuid = uuidv4().replace(/\-/g, '').toLocaleUpperCase() + fileName.substring(fileName.lastIndexOf('.'))
    let time = new Date()
    var year = time.getFullYear() // 获取年
    var month = (time.getMonth() + 1).toString().padStart(2, 0) // 获取月
    var strDate = time.getDate().toString().padStart(2, 0) // 获取日
    dir = prefix + year + '/' + month + '/' + strDate
    if (dir.substring(dir.length - 1, 1) !== '/') {
      dir += '/'
    }
    dir = dir + uuid
    const result = client.put(dir, file)
    result
      .then(res => {
        // console.log(res)
        let size = file.size > 1000000 ? parseFloat(file.size / 1000000).toFixed(2) + 'M' : parseFloat(file.size / 1000).toFixed(2) + 'KB'
        successCallback({
          attachment: dir,
          aliyunAddress: store.getters.domain + dir,
          size: size,
          code: res.res.status
          // host: config.host
        })
      })
      .catch(err => {
        errCallBack(err)
      })
  } catch (e) {
    console.log(e)
  }
  // })
  // .catch(err => {
  //   errCallBack(err)
  // })
}
